package com.itheima.mm.service.impl;

import com.itheima.mm.dao.QuestionDao;
import com.itheima.mm.dao.QuestionItemDao;
import com.itheima.mm.dao.TagDao;
import com.itheima.mm.entity.PageResult;
import com.itheima.mm.entity.QueryPageBean;
import com.itheima.mm.pojo.Question;
import com.itheima.mm.pojo.QuestionItem;
import com.itheima.mm.pojo.Tag;
import com.itheima.mm.service.IQuestionService;
import com.itheima.mm.utils.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 包名:com.itheima.mm.service
 * 作者:Leevi
 * 日期2020-01-16  09:11
 */
@Service
public class QuestionService implements IQuestionService {
    @Autowired
    private QuestionDao questionDao;
    @Autowired
    private QuestionItemDao questionItemDao;

    @Autowired
    private TagDao tagDao;
    @Override
    public PageResult BasicListByPage(QueryPageBean queryPageBean) throws IOException {
        //调用dao层的方法，获取总的基础题目的个数
        Long total = questionDao.findBasicTotal(queryPageBean);

        //调用dao层的方法，获取当前页的基础题目的列表
        List<Question> questionList = questionDao.findBasicList(queryPageBean);
        return new PageResult(total,questionList);
    }
    @Override
    public void addOrUpdateBasicQuestion(Question question) throws Exception {
        //1. 判断到底是添加题目信息还是修改
        //判断题目的id是否为0，如果为0表示添加，如果不为0表示修改
        if (question.getId() == 0) {
            //添加题目
            //1. 保存题目本身的信息
            questionDao.addQuestion(question);//id是自增长的，所以question里面的id此时为0
            //获取自增长的id给question里面的id赋值

            //2. 保存题目选项的信息
            List<QuestionItem> questionItemList = question.getQuestionItemList();
            if (questionItemList != null && questionItemList.size() > 0) {
                //遍历出题目的每一个选项
                for (QuestionItem questionItem : questionItemList) {
                    //调用dao层的方法，保存每一个选项的信息
                    questionItemDao.saveItem(questionItem);
                }
            }

            //3. 保存题目的标签信息
            List<Tag> tagList = question.getTagList();
            if (tagList != null && tagList.size() > 0) {
                //遍历出每一个标签
                for (Tag tag : tagList) {
                    //调用dao层的方法，保存标签信息
                    //要将题目id和tagid一对一对地保存到tr_question_tag表中去
                    Map<String,Integer> map = new HashMap<>();
                    map.put("question_id",question.getId());
                    map.put("tag_id",tag.getId());
                    tagDao.saveTagAndQuestion(map);
                }
            }
        }else {
            //修改题目

        }
    }
}
